iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 11
0
AI & Data

一服見效的 AI 應用系列 第 11

Day 11:混合的推薦模型 (Hybrid Model)

  • 分享至 

  • xImage
  •  

前言

前面我們介紹兩大類的推薦方法 -- 以內容為基礎的過濾(Content Based Filtering) 及 協同過濾(Collaborative Filtering),這兩類的方法各有其優缺點,如下圖:
https://ithelp.ithome.com.tw/upload/images/20190925/20001976eYNgoYMSYU.png

以內容為基礎的過濾(Content Based Filtering),只要有商品的屬性資料,例如電影的類型(Genres)、主題風格(Theme),推薦時再請使用者勾選他喜歡的屬性,系統就可以篩選出合於使用者口味的商品列表。相對的缺點如下:

  1. 需要產業知識:我們必須具有產業知識的人員幫我們作商品分類,需耗費一些人力。
  2. 只會作保守的推薦(Safe Recommendation):系統只會挑選使用者偏好類型的商品,不會推薦其他領域的商品。

協同過濾(Collaborative Filtering)就單純多了,只要將過去的交易記錄找出來,比對出相似的顧客曾買過的商品,或相似的商品推薦給同類型的顧客,就算沒有交易記錄,使用商品瀏覽資料(Page Click)也可以。相對的缺點如下:

  1. 冷啟動(Cold Start):新商品或新顧客沒有足夠的交易記錄,可以作分析。
  2. 沒有考慮商品屬性:可能推薦不符使用者口味的商品。

因此,有專家認為可以結合兩種方法,混合使用,兼容並蓄,那就天下無敵了。混合使用原則如下圖:
https://ithelp.ithome.com.tw/upload/images/20190925/20001976nyajHbNWS6.png

其中的N是網站的總評價數,M是單項商品的總評價數,可自訂門檻。

其他考量

推薦系統在實務上會碰到的問題還蠻多的,列舉以下幾點:

  1. 交易資料過大,Pandas 一次載入,記憶體爆掉:
  • 最簡單的方法就是只取一段時間的資料加以分析。
  • Pandas 有分塊(Chunk)讀取的功能。
import pandas as pd

data_iterator = pd.read_csv("large_data.csv", chunksize=100000)

chunk_list = []  

# Each chunk is in dataframe format
for data_chunk in data_iterator:  
    filtered_chunk = chunk_filtering(data_chunk)
    chunk_list.append(filtered_chunk)
    
filtered_data = pd.concat(chunk_list)

以上程式節錄自『3 simple ways to handle large data with Pandas』

  • 改用 Spark 處理,利用 RDD/MapReduce 分散處理機制。
  • TensorFlow 也有解方,類似 iterator 機制。
  1. 有些隱藏性的特徵(Latent Features)可能也是推薦系統重要的變數,例如,觀看影片長度、停留在網頁的時間,前者可進一步確認使用者是真的有看完影片,確定喜歡這部片子,而不是preview而已。
  2. 情境相關的推薦系統(Context-aware recommendation systems, CARS):額外考慮使用者的情境,例如觀賞地點(在家或點影院)、獨自觀賞/闔家觀賞、觀賞時間(平日或假日)等等。

結語

YouTube 在 2016 年有發表一個完整的架構,它主要是以兩個神經網路(Neural Networks)建構而成,有興趣的讀者可參閱『Deep Neural Networks for YouTube Recommendations』
https://ithelp.ithome.com.tw/upload/images/20190926/20001976yDS7Wdkpif.png


上一篇
Day 10:以模型為基礎的協同過濾 (Model Based Filtering)
下一篇
Day 12:快速完成一個『對話機器人』(ChatBot)
系列文
一服見效的 AI 應用14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言